package modelo.mapa;

public class Oeste extends Borde {
        
    public Oeste(Ubicacion unaUbicacion)
    {
        super();
        this.asignaParaQueDireccionSeDebeAumentarODisminuirDiagonal(unaUbicacion);
    }

    @Override
    public Ubicacion actualizarCoordenadasMovimientoRecto(Ubicacion unaUbicacion) 
    {
        return (new Ubicacion(unaUbicacion.obtenerCoordenadaX(),unaUbicacion.obtenerCoordenadaY()+1));
    }

    @Override
    public Ubicacion actualizarCoordenadasMovimientoDiagonal(Ubicacion unaUbicacion) 
    {
    	this.contadorParaCambiarDireccionEnDiagonal++;
    	if  (this.verificarSiSeDebeCambiarDireccionEnDiagonal())
    	{
    		if (this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen == norte)
    		{
        		return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()-1,unaUbicacion.obtenerCoordenadaY()+1));
    		}
    		else
    		{
    			if (this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen == sur)
    			{
            		return (new Ubicacion(unaUbicacion.obtenerCoordenadaX()+1,unaUbicacion.obtenerCoordenadaY()+1));
    			}
    		}
    	}
    	else
    	{
			return (new Ubicacion(unaUbicacion.obtenerCoordenadaX(),unaUbicacion.obtenerCoordenadaY()+1));
    	}
		return unaUbicacion;        	
    }

    @Override
    public Ubicacion actualizarCoordenadasMovimientoZigZag(Ubicacion unaUbicacion)
    {
        if (this.deboAumentarCoordZigZag)
        {
            this.deboAumentarCoordZigZag = false;
            return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() + 1,unaUbicacion.obtenerCoordenadaY()+1));
        }
        else
        {
            this.deboAumentarCoordZigZag = true;
            return (new Ubicacion(unaUbicacion.obtenerCoordenadaX() -1,unaUbicacion.obtenerCoordenadaY()+1));
        }
    }

	@Override
	protected void asignaParaQueDireccionSeDebeAumentarODisminuirDiagonal(Ubicacion ubicacionOrigen) 
	{
			int distanciaHastaBordeSur = (Mapa.getInstance().obtenerCantidadFilas() - 1 - ubicacionOrigen.obtenerCoordenadaX());
			if (ubicacionOrigen.obtenerCoordenadaX() < distanciaHastaBordeSur )
			{
				this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen = sur;
			}
			else
			{
				this.direccionParaAumentarODisminuirCoordDiagonalSegunUbicacionOrigen = norte;
			}			
	}
}